//Quelle Bild Homer in Herz:http://www.quidco.com/blog/wp-content/uploads/2012/02/HomerSimpson001-608x409.jpg?f22064
//Quelle Bild Homer schaut nicht hin: http://trendyvino.files.wordpress.com/2011/06/homer_triste.jpg
using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;


namespace whereIsTheDonutGame
{
    /// <summary>
    /// Dies ist eine Spielkomponente, die IUpdateable implementiert.
    /// </summary>
    public class Hud : Microsoft.Xna.Framework.DrawableGameComponent
    {
        donutGame game;

        private float elapsed;              // elapsed enthält immer die seit dem letzten Frame vergangenen Sekunden
        private float frameRate;            // die eigentlichen FPS
        private float frames;               //frames die hochgezählten Frames (erhöht sich mit jedem Frame)

        SpriteBatch spriteBatch;
        SpriteFont font;

        KeyboardState kbState = Keyboard.GetState();    // aktueller Zustand der Tastatur
        KeyboardState oldkbState = Keyboard.GetState(); // Zustand der Tastatur im Frame davor

        //Texture2D textureDonut; 
        Texture2D textureDonutKlein;        //hier wird kleinere Grafik Donut gespeichert
        Texture2D homerLeben;               //Textur für Lebensanzeige
        Texture2D homerSchautWeg;           //Textur für 1 Leben verbleibend

        public int counter { get; set; }    //Counter für gesammelte Donuts
        public short life { get; set; }     //Anzahl Leben

        private Boolean showFPS = false;    // Boolean ob FPS-Anzeige aktiviert oder nicht, Standard aus

        int screenWidth, screenHeight;      //an diesen Variablen orientiert sich der Aufbau des Gesamten Hud, so muss nur in GameKlasse geändert werden
        int donutPosY, donutPosX;

        public Hud(donutGame game, int screenWidth, int screenHeight)
            : base(game)
        {
            this.game = game;
            this.screenWidth = screenWidth;
            this.screenHeight = screenHeight;


            //an diesen Variablen orientiert sich der Aufbau des Gesamten Hud, so muss nur hier einmal für alles geändert werden.
            donutPosX = screenWidth - 60;    //onstante Position auf X des untersten Donuts; Standard:1180
            donutPosY = screenHeight - 60;   //Konstante Position auf Y des untersten Donuts; Standard:680
           

            elapsed = 0.0f;
            frameRate = 0.0f;
            frames = 0.0f;
            counter = 0;
        }

        public override void Initialize()
        {
            base.Initialize();
        }

        protected override void LoadContent()
        {
            spriteBatch = new SpriteBatch(Game.GraphicsDevice);
            font = Game.Content.Load<SpriteFont>("Schriften/Arial");

            //textureDonut = game.Content.Load<Texture2D>("Donut");                         //Grafik Donut laden und Texture2D-Objekt zuweisen
            textureDonutKlein = game.Content.Load<Texture2D>("Hud-Content/DonutKlein");     //Grafik Donut laden und Texture2D-Objekt zuweisen
            homerLeben = game.Content.Load<Texture2D>("Hud-Content/HomerLeben");            //Lebensanzeige laden
            homerSchautWeg = game.Content.Load<Texture2D>("Hud-Content/HomerSchautWeg");
        }

        protected override void UnloadContent()
        {
        }

        public override void Update(GameTime gameTime)
        {
            // Allows the game to exit
            if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
                game.Exit();

            // Wenn F unten ist und dies beim letzten Update nicht der Fall war wurde F gedrückt
            if (Keyboard.GetState().IsKeyDown(Keys.F) && oldkbState.IsKeyUp(Keys.F))
            {
                if (!showFPS)
                    showFPS = true;
                else
                    showFPS = false;
            }

            // um zu prüfen welchen Zustand Tastatur im Frame davor hatte
            oldkbState = Keyboard.GetState(); // oldkbState dem aktuelle Tastatur-Zustand zuweißen

            base.Update(gameTime);
        }

        public override void Draw(GameTime gameTime)
        {
            elapsed += (float)gameTime.ElapsedGameTime.TotalSeconds;

            if (elapsed > 1.0f)
            {
                elapsed -= 1.0f;
                frameRate = frames;
                frames = 0;
            }
            else
            {
                frames += 1;
            }

            fpsAnzeigen();

            //Lebensanzeige zeichnen
            spriteBatch.Begin();
            spriteBatch.DrawString(
                font,                                                       //die Schriftart
                game.player.life + "x",                                     //einfacher Text
                new Vector2(screenWidth - 120, 20),                         //Position auf Bildschirm
                game.player.life > 1 ? Color.LightGreen : Color.OrangeRed,  //Farbe ändert sich
                -0.1f,                                                      //Rotation um eigenen Mittelpunkt
                Vector2.Zero,                                               //Ursprung des Sprites
                0.9f,                                                       //Scale
                SpriteEffects.None,                                         //Effekte
                0.0f                                                        //Tiefe der Ebene; 0 vorderste
            );
            spriteBatch.End();

            if (game.player.life >= 2)
                lebenDraw(screenWidth - 70, 10);
            if (game.player.life <= 1)
                homerSchautWegDraw(screenWidth - 70, 5);

            /*
             * Donut Counter Schrift
             **/
            spriteBatch.Begin();
            spriteBatch.DrawString(
                font,   //die Schriftart
                "Donut Counter: " + counter,                                //einfacher Text
                new Vector2(donutPosX - 260, donutPosY - 10),          //Position auf Bildschirm
               counter > (game.donuts2eat-2) ? 
                    Color.LightGreen : Color.OrangeRed,                     //Farbe ändert sich
                0.1f,                                                       //Rotation um eigenen Mittelpunkt
                Vector2.Zero,                                               //Ursprung des Sprites
                0.8f,                                                       //Scale
                SpriteEffects.None,                                         //Effekte
                0.0f                                                        //Tiefe der Ebene; 0 vorderste
            );
            spriteBatch.End();

            /*
             * Donut Counter Grafik  wird nur gezeichnet, wenn Counter 1 ist, dann kommt mit erhöen des Counters immer ein neuer Donut hinzu
             **/
            if (counter == 0)
            {
                //leicht durchsichtigen Donut zeichnen
                spriteBatch.Begin();
                spriteBatch.Draw(textureDonutKlein, new Vector2(donutPosX, donutPosY), new Color(255, 255, 255, 50));
                spriteBatch.End();
            }

            /*
             * Zeichne die gesammelten Donuts 
             **/
            for (int i = 0; i < counter && i < 10; i++)
            {
                donutDraw(donutPosY - i * 20);
            }

            GraphicsDevice.BlendState = BlendState.Opaque;
            GraphicsDevice.DepthStencilState = DepthStencilState.Default;
        }

        private void donutDraw(int donutPosY)
        {
            spriteBatch.Begin();
            spriteBatch.Draw(textureDonutKlein, new Vector2(donutPosX, donutPosY), Color.White);
            spriteBatch.End();
        }

        private void lebenDraw(int screenWidth, int screenHeight)
        {
            spriteBatch.Begin();
            spriteBatch.Draw(homerLeben, new Vector2(screenWidth, screenHeight), Color.White);
            spriteBatch.End();
        }

        private void homerSchautWegDraw(int screenWidth, int screenHeight)
        {
            spriteBatch.Begin();
            spriteBatch.Draw(homerSchautWeg, new Vector2(screenWidth, screenHeight), Color.White);
            spriteBatch.End();
        }

        //FPS-Anzeige einblenden
        private void fpsAnzeigen()
        {
            if (showFPS)
            {
                //FPS
                //hier wird die Schrift gezeichnet
                spriteBatch.Begin();
                spriteBatch.DrawString(font,
                    "FPS: " + frameRate.ToString("0.00"),   //Text
                    new Vector2(10, 15),                    //Position auf Karte
                    Color.HotPink,                            //Farbe
                    -0.1f,                                  //Rotation um eigenen Mittelpunkt
                    Vector2.Zero,                           //Ursprung des Sprites
                    0.50f,                                  //Scale
                    SpriteEffects.None,                     ///Effekte
                    0.0f                                    //Tiefe der Ebene; 0 vorderste
                    );
                spriteBatch.End();
            }

        }
    }
}
